1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect;
18
19 import com.google.common.collect.testing.Helpers.NullsBeforeTwo;
20 import com.google.common.collect.testing.SafeTreeMap;
21 import com.google.common.collect.testing.SortedMapTestSuiteBuilder;
22 import com.google.common.collect.testing.TestStringSortedMapGenerator;
23 import com.google.common.collect.testing.features.CollectionFeature;
24 import com.google.common.collect.testing.features.CollectionSize;
25 import com.google.common.collect.testing.features.MapFeature;
26
27 import junit.framework.Test;
28 import junit.framework.TestSuite;
29
30 import java.util.Collection;
31 import java.util.Comparator;
32 import java.util.Iterator;
33 import java.util.Map;
34 import java.util.Map.Entry;
35 import java.util.Set;
36 import java.util.SortedMap;
37
38
39
40
41
42
43 public class ForwardingSortedMapTest extends ForwardingMapTest {
44 static class StandardImplForwardingSortedMap<K, V>
45 extends ForwardingSortedMap<K, V> {
46 private final SortedMap<K, V> backingMap;
47
48 StandardImplForwardingSortedMap(SortedMap<K, V> backingMap) {
49 this.backingMap = backingMap;
50 }
51
52 @Override protected SortedMap<K, V> delegate() {
53 return backingMap;
54 }
55
56 @Override public boolean containsKey(Object key) {
57 return standardContainsKey(key);
58 }
59
60 @Override public boolean containsValue(Object value) {
61 return standardContainsValue(value);
62 }
63
64 @Override public void putAll(Map<? extends K, ? extends V> map) {
65 standardPutAll(map);
66 }
67
68 @Override public V remove(Object object) {
69 return standardRemove(object);
70 }
71
72 @Override public boolean equals(Object object) {
73 return standardEquals(object);
74 }
75
76 @Override public int hashCode() {
77 return standardHashCode();
78 }
79
80 @Override public Set<K> keySet() {
81 return new StandardKeySet();
82 }
83
84 @Override public Collection<V> values() {
85 return new StandardValues();
86 }
87
88 @Override public String toString() {
89 return standardToString();
90 }
91
92 @Override public Set<Entry<K, V>> entrySet() {
93 return new StandardEntrySet() {
94 @Override
95 public Iterator<Entry<K, V>> iterator() {
96 return backingMap.entrySet().iterator();
97 }
98 };
99 }
100
101 @Override public void clear() {
102 standardClear();
103 }
104
105 @Override public boolean isEmpty() {
106 return standardIsEmpty();
107 }
108
109 @Override public SortedMap<K, V> subMap(K fromKey, K toKey) {
110 return standardSubMap(fromKey, toKey);
111 }
112 }
113
114 public static Test suite() {
115 TestSuite suite = new TestSuite();
116
117 suite.addTestSuite(ForwardingSortedMapTest.class);
118 suite.addTest(SortedMapTestSuiteBuilder.using(new TestStringSortedMapGenerator() {
119 @Override protected SortedMap<String, String> create(
120 Entry<String, String>[] entries) {
121 SortedMap<String, String> map = new SafeTreeMap<String, String>();
122 for (Entry<String, String> entry : entries) {
123 map.put(entry.getKey(), entry.getValue());
124 }
125 return new StandardImplForwardingSortedMap<String, String>(map);
126 }
127 }).named("ForwardingSortedMap[SafeTreeMap] with no comparator and standard "
128 + "implementations").withFeatures(CollectionSize.ANY,
129 CollectionFeature.KNOWN_ORDER, MapFeature.ALLOWS_NULL_VALUES,
130 MapFeature.GENERAL_PURPOSE, CollectionFeature.SUPPORTS_ITERATOR_REMOVE)
131 .createTestSuite());
132 suite.addTest(SortedMapTestSuiteBuilder.using(new TestStringSortedMapGenerator() {
133 private final Comparator<String> comparator = NullsBeforeTwo.INSTANCE;
134
135 @Override protected SortedMap<String, String> create(
136 Entry<String, String>[] entries) {
137 SortedMap<String, String> map =
138 new SafeTreeMap<String, String>(comparator);
139 for (Entry<String, String> entry : entries) {
140 map.put(entry.getKey(), entry.getValue());
141 }
142 return new StandardImplForwardingSortedMap<String, String>(map);
143 }
144 }).named("ForwardingSortedMap[SafeTreeMap] with natural comparator and "
145 + "standard implementations").withFeatures(CollectionSize.ANY,
146 CollectionFeature.KNOWN_ORDER, MapFeature.ALLOWS_NULL_VALUES,
147 MapFeature.ALLOWS_NULL_KEYS, MapFeature.ALLOWS_ANY_NULL_QUERIES,
148 MapFeature.GENERAL_PURPOSE,
149 CollectionFeature.SUPPORTS_ITERATOR_REMOVE).createTestSuite());
150 suite.addTest(SortedMapTestSuiteBuilder.using(new TestStringSortedMapGenerator() {
151 @Override protected SortedMap<String, String> create(
152 Entry<String, String>[] entries) {
153 ImmutableSortedMap.Builder<String, String> builder =
154 ImmutableSortedMap.naturalOrder();
155 for (Entry<String, String> entry : entries) {
156 builder.put(entry.getKey(), entry.getValue());
157 }
158 return new StandardImplForwardingSortedMap<String, String>(
159 builder.build());
160 }
161 }).named("ForwardingSortedMap[ImmutableSortedMap] with standard "
162 + "implementations").withFeatures(
163 CollectionSize.ANY, MapFeature.REJECTS_DUPLICATES_AT_CREATION,
164 MapFeature.ALLOWS_ANY_NULL_QUERIES)
165 .createTestSuite());
166
167 return suite;
168 }
169
170 @Override public void setUp() throws Exception {
171 super.setUp();
172
173
174
175
176
177 @SuppressWarnings("unchecked")
178 final SortedMap<String, Boolean> sortedMap =
179 createProxyInstance(SortedMap.class);
180 forward = new ForwardingSortedMap<String, Boolean>() {
181 @Override protected SortedMap<String, Boolean> delegate() {
182 return sortedMap;
183 }
184 };
185 }
186
187 public void testComparator() {
188 forward().comparator();
189 assertEquals("[comparator]", getCalls());
190 }
191
192 public void testFirstKey() {
193 forward().firstKey();
194 assertEquals("[firstKey]", getCalls());
195 }
196
197 public void testHeadMap_K() {
198 forward().headMap("asdf");
199 assertEquals("[headMap(Object)]", getCalls());
200 }
201
202 public void testLastKey() {
203 forward().lastKey();
204 assertEquals("[lastKey]", getCalls());
205 }
206
207 public void testSubMap_K_K() {
208 forward().subMap("first", "last");
209 assertEquals("[subMap(Object,Object)]", getCalls());
210 }
211
212 public void testTailMap_K() {
213 forward().tailMap("last");
214 assertEquals("[tailMap(Object)]", getCalls());
215 }
216
217 @Override SortedMap<String, Boolean> forward() {
218 return (SortedMap<String, Boolean>) super.forward();
219 }
220 }